package net.neosoftwareltda.neomobile;



import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class LecturaActivity extends Activity {
	
	//variables de BD
		BaseDatos BDSQLite = null;
		SQLiteDatabase db = null;
		Cursor cur;
	//componentes del form
		TextView lblUsuario;
		TextView lblDireccion;
		TextView lblRuta;
		TextView lblNombre;
		TextView lblNumMedidor;
		TextView lblMarcaMedidor;
		TextView count;
		EditText txtLectura;
		Button btnAtras;
		Button btnSiguiente;
		Spinner spinner;
	// variable donde se gaurda el PK para realizar el UPDATE
		int idDetalle = 1;
	//lista donde se guardan las notas para llenar el spinner
		List<String> listaNotas = new ArrayList<String>();
		
	
	@Override
	  public void onCreate(Bundle savedInstanceState) {
		
		 super.onCreate(savedInstanceState); 
		 setContentView(R.layout.lectura);
		 // revisar la logica, para no cargar el cursor ni la BD al volver a entrar a la pantalla.
		 
		 lblUsuario = (TextView) findViewById(R.id.lblUsuario);
		 lblDireccion = (TextView) findViewById(R.id.lblDireccion);
		 lblRuta = (TextView) findViewById(R.id.lblRuta);
		 lblNombre = (TextView) findViewById(R.id.lblNombre);
		 lblNumMedidor = (TextView) findViewById(R.id.lblNumMedidor);
		 lblMarcaMedidor = (TextView) findViewById(R.id.lblMarcaMedidor);
		 txtLectura = (EditText) findViewById(R.id.txtLectura);
		 btnAtras = (Button) findViewById(R.id.btnAtras);
		 btnAtras.setEnabled(false);
//		 btnSiguiente = (Button) findViewById(R.id.btnSiguiente);
		 count = (TextView) findViewById(R.id.count);
		 
		//conecta y abre la BD
		 if (null == db || !db.isOpen() ) {
			 BDSQLite = new BaseDatos(this, "BDwork", null, 1);
		     db = BDSQLite.getWritableDatabase();
		     cur = db.rawQuery("select id, usuario, direccion, ruta, nombre, num_medi, marca, l_tomada from detalle;", null); 
		 }
		 
		 this.callNotas();
		 
		 
	}
	
	/**
	 * Metodo encargado de llamar a la BD, consultar la tabla notas y retornar una lista de las notas, para ser agregadas al spinner.
	 * JOHGRA01
	 */
	private void callNotas() {
		Cursor curNotas = null;
		spinner = (Spinner) findViewById(R.id.spinner1);
		curNotas = db.rawQuery("select * from notas;", null); 
		
		while (curNotas.moveToNext()){
			listaNotas.add(curNotas.getString(0) + " " + curNotas.getString(1));				 
		}
		 
		 ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,
					android.R.layout.simple_spinner_item, listaNotas);
		 dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
		 spinner.setAdapter(dataAdapter);
		 
	}
	
	//salvando estado de la pantalla
	@Override
	public void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		outState.putInt("id", cur.getInt(0));
		outState.putString("lectura", txtLectura.getText().toString());
	}
	
	@Override
	public void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		
		cur = db.rawQuery("select id, usuario, direccion, ruta, nombre, num_medi, marca, l_tomada from detalle;", null);
		cur.moveToPosition(savedInstanceState.getInt("id"));
		//idDetalle = savedInstanceState.getInt("id");
		txtLectura.setText(savedInstanceState.getString("lectura"));
	}
	
	@Override
	public void onResume(){
		
		 super.onResume();
		 
//		 SharedPreferences prefs = getPreferences(0);
		 SharedPreferences prefs = this.getSharedPreferences("net.neosoftwareltda.neomobile", Context.MODE_PRIVATE);
		 cur.moveToPosition(prefs.getInt("id", 0));
		 if (prefs.getInt("id", 0) == 0){ idDetalle = 1; } 
		 else {idDetalle = prefs.getInt("id", 0) + 1; }
			
		 txtLectura.setText(prefs.getString("lectura", ""));
		 
//		 Log.e("mens", "valor " + cur.getPosition());
		 if (cur.getPosition() > -1){
			 	lblUsuario.setText(cur.getString(1));
			    lblDireccion.setText(cur.getString(2));
			    lblRuta.setText(cur.getString(3));
			    lblNombre.setText(cur.getString(4));
			    lblNumMedidor.setText(cur.getString(5));
			    lblMarcaMedidor.setText(cur.getString(6));
			    txtLectura.setText(String.valueOf(cur.getString(7)));
			    count.setText(String.valueOf((cur.getPosition() + 1) + "/" + cur.getCount()));
		 } 
		 	
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		SharedPreferences.Editor editor = this.getSharedPreferences("net.neosoftwareltda.neomobile", Context.MODE_PRIVATE).edit();
		editor.putInt("id", cur.getInt(0) -1);
		editor.putString("lectura", txtLectura.getText().toString());
		editor.commit();
	}
	
	//metodo encargado de recorrer el detalle y pintar los valores en el form, para capturar la lectura y realizar el UPDATE correnspondiente
	public void btnNext(){
		
		//si hay filas
		if (cur.getCount() > 0) {
			//desactivar boton de siguiente, al finalizar el ultimo registro
		    if (cur.isLast()) {
		    	//btnSiguiente.setEnabled(false);
		    	//enviar mensaje avisando al usuario, que se llego al final de los registros
		    	Toast.makeText(
						getBaseContext(),
						"Final de las lecturas", Toast.LENGTH_LONG)
						.show();
		    } else {
		    	cur.moveToNext();
			    lblUsuario.setText(cur.getString(1));
			    lblDireccion.setText(cur.getString(2));
			    lblRuta.setText(cur.getString(3));
			    lblNombre.setText(cur.getString(4));
			    lblNumMedidor.setText(cur.getString(5));
			    lblMarcaMedidor.setText(cur.getString(6));
			    txtLectura.setText(cur.getString(7));
			    count.setText(String.valueOf((cur.getPosition() + 1) + "/" + cur.getCount()));
				
			    idDetalle = cur.getInt(0);
			    btnAtras.setEnabled(true);
		    }
			
		  
		    //setea el spinner al cambiar de posición el cursor.
		    spinner.setSelection(0);
		    
		}
		
		//definir cuando se cierra el cursor
	}
	
	public void btnBefore(View v) {
		
		if (cur.getPosition() > 0) {
			cur.moveToPrevious();
		    lblUsuario.setText(cur.getString(1));
		    lblDireccion.setText(cur.getString(2));
		    lblRuta.setText(cur.getString(3));
		    lblNombre.setText(cur.getString(4));
		    lblNumMedidor.setText(cur.getString(5));
		    lblMarcaMedidor.setText(cur.getString(6));
		    txtLectura.setText(String.valueOf(cur.getString(7)));
		    count.setText(String.valueOf((cur.getPosition() + 1) + "/" + cur.getCount()));
			
		    idDetalle = cur.getInt(0);
		} else {
			 btnAtras.setEnabled(false);
		}
	}
	
	public void btnGuardarLectura(View v){
		
		//obtener la hora actual
		Date date = new GregorianCalendar().getTime();
		//SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String fechaActual = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); //df.format(date);
		
		ContentValues values = new ContentValues();
		values.put("l_tomada", txtLectura.getText().toString());
		values.put("fech_toma", fechaActual);
		values.put("nota", String.valueOf(spinner.getSelectedItem()).split(" ")[0]); 
		db.update("detalle", values, "id = " + idDetalle, null);
		Toast.makeText(
				getBaseContext(),
				"Guardado OK", Toast.LENGTH_SHORT)
				.show();
		cur = db.rawQuery("select id, usuario, direccion, ruta, nombre, num_medi, marca, l_tomada from detalle;", null);
		cur.moveToPosition(idDetalle -1);
		
		this.btnNext();
	}
	
	

}
